<?php
/**
Interface DAO de Fonte. Estes m�todos N�O devem ser chamados diretamente.
Ao inv�s disso devem ser chamados por m�todos da classe Fonte.
*/
require_once('DataAccess.php');
require_once('Fonte.php');

class FonteDAO
{
      private $database;

      public function __construct( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      public function CadastrarFonte( $fonte )
      {
      	$consulta = $this->database->Fetch("BEGIN");
      	$programa = $fonte->programa;
      	
      	if( $consulta )
      	{
      	  $consulta = $this->database->Fetch("INSERT into t_fonte(t_programa_id,tipo_despesa,fonte_recurso,valor)
      	  									VALUES('$programa->id','$fonte->tipoDespesa','$fonte->fonteRecurso',$fonte->valor)");
      	  
      	  if( $consulta )
      	  {
      	  	$this->database->Fetch("COMMIT");
      	  	return TRUE;
      	  }
      	  else
      	  {
      	  	$this->database->Fetch("ROLLBACK");
      	  	return FALSE;
      	  }
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
        	return FALSE;
      	}
      	
      }
      
      public function AlterarFonte( $fonte )
      {
        $consulta = $this->database->Fetch("BEGIN");
        $programa = $fonte->programa;
      	
      	if( $consulta )
      	{
      	  $consulta = $this->database->Fetch("UPDATE t_fonte SET t_programa_id=' $programa->id',
      	  tipo_despesa='$fonte->tipoDespesa',fonte_recurso='$fonte->fonteRecurso',valor=$fonte->valor
      	  where id = '$fonte->id' ");
      	  									
      	  
      	  if( $consulta )
      	  {
      	  	$this->database->Fetch("COMMIT");
      	  	return TRUE;
      	  }
      	  else
      	  {
      	  	$this->database->Fetch("ROLLBACK");
      	  	return FALSE;
      	  }
      	}
      	else
      	{
      		$this->database->Fetch("ROLLBACK");
        	return FALSE;
      	}      	
      	
      }
      
      public function ExcluirFonte( $fonteId )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{       
      			$resultado = $this->database->Fetch(" DELETE FROM t_fonte WHERE id = $fonteId ");
               
    			if( $consulta )
            	{
            		$consulta = $this->database->Fetch("COMMIT");
            		return TRUE;
           		}
           		else
           		{
        			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		}
      }
      /**
      Busca na tabela t_fonte todas as fontes v�nculadas ao programa de chave-prim�ria $programaId.
      Para cada registro encontrado ser� criada uma inst�ncia de Fonte com todos os valores das colunas do registro retornado.
      Por fim, este m�todo retornar� um array de objetos Fonte para os registros encontrados no banco de dados.
      @programaId - Identificador no banco de dados do programa que cont�m as fontes.
      @return - Retorna um array de objetos do tipo Fonte. Caso n�o encontre nenhum registro retorna FALSE.
     */
      public function LoadFontes( $programaId )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_fonte WHERE T_PROGRAMA_ID = '".$programaId."'");
             if( $consulta != FALSE )
             {
                  $rows = $this->database->getRow();
                  $objetos = array();

                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $fonte = new Fonte();
                       $fonte->id = $rows[$i]['id'];
                       $programa = new Programa();
                       $programaVinculado = $programa->CarregarPrograma( $rows[$i]['t_programa_id'] );
                       $fonte->programa = $programaVinculado;
                       $fonte->tipoDespesa = $rows[$i]['tipo_despesa'];
                       $fonte->fonteRecurso = $rows[$i]['fonte_recurso'];
                       $fonte->valor = $rows[$i]['valor'];

                       $objetos[] = $fonte;
                  }

                  return $objetos;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }
      /**
      Busca na tabela t_fonte pelo registro de chave-prim�ria $id.
      @id - Chave-prim�ria da fonte cadastrada no banco de dados.
      @return - Retorna um objeto do tipo Fonte com todos os valores das colunas associadas ao registro. Caso n�o encontre nenhum registro retorna FALSE.
      */
      public function LoadFonte( $id )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_fonte WHERE ID = '".$id."'");
             if( $consulta != FALSE )
             {
                 $rows = $this->database->getRow();
                 $fonte = new fonte();
                 $fonte->id = $rows[0]['id'];
                 $programa = new Programa();
                 $programaVinculado = $programa->CarregarPrograma( $rows[0]['t_programa_id'] );
                 $fonte->programa = $programaVinculado;
                 $fonte->tipoDespesa = $rows[0]['tipo_despesa'];
                 $fonte->fonteRecurso = $rows[0]['fonte_recurso'];
                 $fonte->valor = $rows[0]['valor'];
                 
                 return $fonte;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }
      }

     public function LoadFontePorAcaoTipoDespesa( $acaoId , $fonteRecurso , $tipoDespesa )
      {
             $consulta = $this->database->Fetch(" SELECT * FROM t_fonte WHERE t_programa_id = '".$acaoId."' AND fonte_recurso='$fonteRecurso' AND tipo_despesa='$tipoDespesa' ");
             if(( $consulta != FALSE )&&(mysql_num_rows( $consulta ) > 0))
             {
                 $rows = $this->database->getRow();
                 $fonte = new fonte();
                 $fonte->id = $rows[0]['id'];
                 $programa = new Programa();
                 $programaVinculado = $programa->CarregarPrograma( $rows[0]['t_programa_id'] );
                 $fonte->programa = $programaVinculado;
                 $fonte->tipoDespesa = $rows[0]['tipo_despesa'];
                 $fonte->fonteRecurso = $rows[0]['fonte_recurso'];
                 $fonte->valor = $rows[0]['valor'];
                 
                 return $fonte;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                 return FALSE;
             }            
             return false; 
      }
            
      /**
      Busca no banco de dados pelo n�mero da fonte de chave-prim�ria $fonteId
      @fonteId - Chave-prim�ria da fonte cadastrada no banco
      @return - Retorna uma string com o nome da fonte. Caso n�o encontre nenhum resultado, retorna FALSE
      */
      public function LoadRecurso( $fonteId )
      {
               $consulta = $this->database->Fetch("SELECT f.fonte_recurso as fonte
                                                   FROM t_compra c, t_fonte f
                                                   WHERE c.t_fonte_id = ".$fonteId."
                                                   AND f.id = c.t_fonte_id");
               if( $consulta != FALSE )
               {
                   $rows = $this->database->getRow();

                   $fonte = $rows[0]['fonte'];

                   return $fonte;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                   return FALSE;
             }
      }
      
      /**
      Busca no banco de dados pelo Tipo de Despesa da fonte podendo ser 33 - corrente, 44 - capital;
      @TipoDespesa - Tipo de Despesa da fonte podendo ser 33 - corrente, 44 - capital
      @return - Retorna uma objeto do tipo fonte. Caso n�o encontre nenhum resultado, retorna FALSE
      */
      public function CarregarFontes( $tipoDespesa )
      {
               $consulta = $this->database->Fetch("SELECT f.fonte_recurso as fonte
                                                   FROM t_compra c, t_fonte f
                                                   WHERE c.t_fonte_id = ".$fonteId."
                                                   AND f.id = c.t_fonte_id");
               if( $consulta != FALSE )
               {
                   $rows = $this->database->getRow();

                   $fonte = $rows[0]['fonte'];

                   return $fonte;
             }
             else if( mysql_num_rows( $consulta ) == 0 )
             {
                   return FALSE;
             }
      }
      
}
?>
